# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
import re


class AdministrativeSpider(CrawlSpider):
    name = 'administrative'
    allowed_domains = ['cbirc.gov.cn']
    start_urls = ['http://www.cbirc.gov.cn/cn/list/9103/910305/ybjhcf/1.html']


    # 定义规则，抓取符合要求的url
    rules = (   #元组-有顺序
        # linkExtractor，连接提取器，提取url地址
        # allow是允许爬取的规则，后面的内容是正则表达式，匹配页面中所有符合匹配规则的a标签
        # callback-回调函数，提取出来的url地址的response会交给callback处理，用于解析抓取到的符合匹配的链接（不一定有，比如说“翻页”）
        # follow （是否跟进，是否继续请求抓取到的链接）当前url地址的响应是否又重新经过rules来提取地址（——循环）：（可写可不写）默认为False-不会继续被提取

        # 编写匹配详情页的规则，抓取到详情页的链接后不用跟进
        Rule(LinkExtractor(allow=r'/cn/doc/9103/910305/ybjhcf/\w+\.html'), callback='parse_item'),
        Rule(LinkExtractor(allow=r'/web/site0/tab5240/module14430/page/\w+\.html'), follow=True),
    )

    # parse函数有特殊功能（提取的链接自动通过父类的parse方法发动请求），不能定义
    def parse_item(self, response):
        item = {}
        item["title"] = response.xpath('//table[@width="1100"]/tbody/tr[2]/td/table/tbody/tr[3]/td/div/p[2]/span/font/text()').extract_first()
        item["publish_date"] = re.findall('发布时间：(20\d{2}-\d{2}-\d{2})',response.body.decode())[0]
        #item['domain_id'] = response.xpath('//input[@id="sid"]/@value').get()
        #item['name'] = response.xpath('//div[@id="name"]').get()
        #item['description'] = response.xpath('//div[@id="description"]').get()
        return item
    #     yield scrapy.Request(
    #         url="",
    #         callback=self.parse_detail,
    #         meta = {"item":item}
    #     )
    #
    # def parse_detail(self, response):
    #     item = response.meta["item"]
    #     pass

"""
问题1：（521错误）国家网站，做了严格的反爬处理

注意1：需要额外注意什么时候该写callback和follow
注意2：crawlspider会在请求之前自动补充完整url地址
"""
